package com.learn.mybatis.dao;

import com.learn.mybatis.entity.Emp;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 *
 * 声明这个接口是为了方便上层代理调用 Mybatis 的具体功能
 * 接口的全类名要和 mapper 的配置文件的 namespace 属性一致，这样才能通过接口找到 mapper 的配置
 * 接口的方法名要和 mapper 配置文件中的 Sql 语句标签的 id 属性一致， 这样才能通过方法名找到具体的 Sql 语句
 * 又因为在 Mapper 配置文件中的 id 属性值是不可重复的，所有当前接口的方法名也不能重复——当前接口中的方法不能重载
 */
public interface EmployeeMapper {
    /**
     * 通过这个方法对应的Mapper配置文件中的Sql语句
     * @param empId 当前方法的参数对应SQL语句中的#{empId}声明的参数
     * @return 当前方法的返回值类型和 resultType 属性指定的类型一致
     */
    Emp selectEmpById(Long empId);

    /**
     *
     * @param emp
     * @return
     */
    int insertEmp(Emp emp);

    /**
     *
     * @param empId
     * @return
     */
    int deleteEmp(long empId);

    /**
     * @param emp
     * 执行更新操作 Mybatis 返回的受影响行数也可以不使用
     */
    void updateEmp(Emp emp);

    /**
     *
     * @param empName
     * @return
     */
    Emp selectEmpByName(String empName);


    void updateSalaryById(@Param("empId") Long empId,@Param("empSalary") Double salary);

    void updateEmployeeByMap(Map<String, Object> paramMap);

    Integer selectCount();

    Map<String, Object> selectForMap(int empId);

    List<Emp> selectForList();

    int insertWithKey(Emp emp);

    List<Emp> selectWithResultMap();
}
